home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-02-20 | 5.0 KB | 139 lines | [TEXT/CWIE] |
-
- #include "DBElementTokenIterator.h"
- #include "DBElementToken.h"
- #include "DBElement.h"
- #include "AbstractSearchSpec.h"
- #include "AbstractCollector.h"
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::~TDBElementTokenIterator
- //--------------------------------------------------------------------------------
- TDBElementTokenIterator::~TDBElementTokenIterator()
- {
- } // TDBElementTokenIterator::~TDBElementTokenIterator
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::Reset
- //--------------------------------------------------------------------------------
- void TDBElementTokenIterator::Reset(const TAETransaction&, Boolean iterationDirection /* = kForwardIteration */)
- {
- fIterator.Reset(iterationDirection);
- }
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::More
- //--------------------------------------------------------------------------------
- Boolean TDBElementTokenIterator::More(const TAETransaction&) const
- {
- return fIterator.More();
- }
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::Next
- //--------------------------------------------------------------------------------
- void TDBElementTokenIterator::Next(const TAETransaction&)
- {
- fIterator.Next();
- }
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::Current
- //--------------------------------------------------------------------------------
- TAbstractScriptableObject* TDBElementTokenIterator::Current(const TAETransaction&)
- {
- return new TDBElementToken(fIterator.Current()->DBElementCursor());
- }
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::CurrentDerivedFromOSLClass
- //--------------------------------------------------------------------------------
- Boolean TDBElementTokenIterator::CurrentDerivedFromOSLClass(const TAETransaction& t, DescType objectClass)
- {
- return TDBElementToken(fIterator.Current()->DBElementCursor()).DerivedFromOSLClass(t, objectClass);
- }
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::GetNamedElement
- //--------------------------------------------------------------------------------
- TAbstractScriptableObject* TDBElementTokenIterator::GetNamedElement(const TAETransaction& t, DescType desiredClass, TDescriptor nameDesc)
- {
- TAbstractScriptableObject* result = nil;
-
- short oldState = nameDesc.Lock();
-
- //
- // A record iterator is given a reference to the top element of the tree
- // to be iterated over, so we must ask this item's _parent_ to find
- // the element with the name we want.
- //
- AConst<TDBElement> namedElement = fIteratorOwner->DBElementCursor()->TreeOwner(TTransactionSuite::GetTransactionFromEvent(t))->DBElementCursor()->GetNamedElement(TTransactionSuite::GetTransactionFromEvent(t), nameDesc);
- nameDesc.Unlock(oldState);
- if(namedElement.Exists())
- {
- result = new TDBElementToken(namedElement);
- if(result->DerivedFromOSLClass(t, desiredClass) == false)
- {
- delete result;
- result = nil;
- }
- }
-
- return result;
- } // TDBElementTokenIterator::GetNamedElement
-
- #if 0
-
- //--------------------------------------------------------------------------------
- // TDBElementTokenIterator::Contains
- //--------------------------------------------------------------------------------
- Boolean TDBElementTokenIterator::Contains(TAbstractScriptableObject* objectToTestForMembership)
- {
- Boolean isContained = false;
-
- for(this->Reset(); this->More() && (isContained == false); this->Next())
- {
- AConst<TDBRecord> current = fIterator.Current();
-
- // isContained = current ???; // •••
- }
-
- return isContained;
- } // TDBElementTokenIterator::Contains
-
- #endif
-
- //----------------------------------------------------------------------------------------
- // TDBElementTokenIterator::AccessBySearchSpec:
- //----------------------------------------------------------------------------------------
- void TDBElementTokenIterator::AccessBySearchSpec(const TAETransaction& t, TAbstractCollector* collector, DescType desiredClass, TAbstractSearchSpec* searchSpec)
- {
- TAbstractScriptableObject* resultToken = nil;
- TAbstractScriptableObject* token = nil;
- OSErr err = noErr;
-
- NOREGISTER(token);
-
- Boolean iterationDirection = collector->CollectorRequest(t, kSearchShouldIterateBackwards) ? kBackwardIteration : kForwardIteration;
- for(this->Reset(t, iterationDirection); this->More(t) && (collector->CollectorRequest(t, kCollectionIsFull) == false); this->Next(t))
- {
- Try
- {
- if(token == nil)
- token = this->Current(t);
- else
- ((TDBElementToken*)token)->AssignDifferentElement(fIterator.Current()->DBElementCursor());
- if(searchSpec->Compare(t, token) && (token->DerivedFromOSLClass(t, desiredClass) == true))
- {
- collector->AddToCollection(token);
- token = nil;
- }
- }
- Catch(err)
- {
- }
- }
-
- if(token != nil)
- token->DisposeDesignator();
- } // TDBElementTokenIterator::AccessBySearchSpec
-